home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Whiteline: delta
/
whiteline CD Series - delta.iso
/
tex
/
tools
/
dvi_300b
/
treiber
/
sources
/
fast_dvi.s
< prev
next >
Wrap
Text File
|
1995-11-25
|
3KB
|
164 lines
;********************************************************************
;*** *Schnelle* Ausgabe von Zeichen im Hintergrund *****
;********************************************************************
EXPORT prn_byte, exstall, old_vec, CookieJar
IMPORT shm_name, Fdelete, Cconws, Supexec, Fselect
TEXT
; **********************************************
; **** Sucht nach CookieJar (für Dialoge) ****
Cook: DC.L 0
CookieJar:
MOVE.L D0, Cook
PEA SearchCookie(PC)
MOVE #38, -(A7)
TRAP #14
ADDQ.L #6, A7
MOVE.L Cook, D0
RTS
SearchCookie:
MOVE.L $5A0, D0
BLE NoCookie
MOVE.L D0, A0
MOVE.L Cook, D0
cl: CMP.L (A0), D0
BEQ YesCookie
TST.L (A0)+
BEQ NoCookie
ADDQ.L #4, A0
BRA cl
YesCookie:
MOVE.L 4(A0), Cook
RTS
NoCookie:
CLR.L Cook
RTS
;**** 30.1.92 ****
; **** Programm durch Signal gekillt! */
exstall:
TST.L ptr
BEQ no_ex_
LEA ex_print(PC),A0
BSR Supexec
no_ex_:
; LEA shm_name,A0 ; Temporäre Datei wird z.Zt. nicht gelöscht!
; BSR Fdelete
LEA killed, A0
BSR Cconws
CLR -(A7)
TRAP #1
RTS
ex_print:
CLR.L anzahl
BCLR #0, $FFFFFA09.W ; Ausschalten
BCLR #0, $FFFFFA15.W ; Maskieren
MOVE.L old_vec,$100.W
CLR.L old_vec
RTS
/* Idee aus ST-Computer 5/92, sehr stark modifiziert */
prn_byte:
MOVE.L D0, anzahl ; Anzahl
BLE no_print
MOVE.L A0, ptr
LEA i_byte(PC),A0
BSR Supexec
no_print:RTS
;* Interrupt installieren *
i_byte: BTST #0, $FFFFFA01.W
BEQ i_b2 ; Nicht busy
MOVE.L $0446.W,A0
ADDQ.L #2, A0
.wait: MOVE.L $0466.W,D0 ; Timer nach D0
BTST #0, $FFFFFA01.W
BEQ i_b2 ; Nicht busy
CMPA D0, A0 ; Noch warten?
BGE .wait
RTS
i_b2: LEA xbra, A0 ; Xbra-Routine bauen
MOVE.L #'XBRA',(A0)+
MOVE.L #'DVIR',(A0)+
MOVE.L $100.W, (A0)+ ; alter Vektor
MOVE.L #$07C0700,(A0)+ ; ORI #$0700,SR
MOVE.W #$4EB9, (A0)+ ; JSR out
MOVE.L #out, (A0)+
MOVE.W #$4E73, (A0)+ ; RTE
MOVE.L #int, $100.W
BCLR #0, $FFFFFA03.W
BCLR #0, $FFFFFA05.W
BSET #0, $FFFFFA09.W ; Anschalten
BSET #0, $FFFFFA15.W ; Maskieren
MOVE.B #$FE, $FFFFFA11.W
MOVE.B #14, $FFFF8800.W ; Strobe aus
MOVE.B $FFFF8800.W,D0
BSET #5, D0
MOVE.B D0, $FFFF8802.W
MOVEQ #0, D0
;* Ab hier Druck *
;* Byte ausgeben *
out: SUBQ.L #1, anzahl ; Schon fertig?
BMI ende
MOVEM.L D0/A0, -(A7)
; BCLR #0, $FFFFFA15.W ; Demaskieren
MOVE.B #15, $FFFF8800.W
MOVE.L ptr, A0
MOVE.B (A0)+, $FFFF8802.W
MOVE.L A0, ptr
MOVE wait1, D0
.time1: NOP
DBRA D0, .time1
MOVE.B #14, $FFFF8800.W
MOVE.B $FFFF8800.W,D0
BCLR #5, D0
MOVE.B D0, $FFFF8802.W
BSET #5, D0
MOVE.W D0, A0
MOVE wait2, D0
.time2: NOP
DBRA D0, .time2
MOVE.W A0, D0
MOVE.B D0, $FFFF8802.W
MOVEM.L (A7)+, D0/A0
; BSET #0, $FFFFFA15.W ; Maskieren
MOVE.B #$FE, $FFFFFA11.W
RTS
;* Beenden *
ende: MOVE.L old_vec,$100.W
BCLR #0, $FFFFFA09.W ; Ausschalten
BCLR #0, $FFFFFA15.W ; Demaskieren
CLR.L old_vec
RTS
DATA
DC.B 'PATCH:'
wait1: DC.W 6
wait2: DC.W 100
killed: DC.B 27,'H ',7,0
BSS
anzahl: DS.L 1
ptr: DS.L 1
;* Die Interuptroutine */
xbra: DS.L 2
old_vec:DS.L 1
int: DS.L 3